Page({
  data: {
    username: '',
    password: '',
    confirmPwd: '',
    phone: '',
    nickname: '',
    age: '',
    gender: 1, // 1:男 2:女
    genderIndex: 0, // 性别选择器索引
    genderOptions: ['男', '女'],
    address: '',
    isLoading: false,
    formErrors: {
      username: '',
      password: '',
      confirmPwd: '',
      phone: '',
      age: ''
    },
    bgVisible: true
  },

  onLoad() {
    // 背景图过渡效果
    setTimeout(() => {
      this.setData({ bgVisible: false });
    }, 2000);
  },

  // 输入框内容变化
  onInputChange(e) {
    const { field } = e.currentTarget.dataset;
    this.setData({
      [field]: e.detail.value
    });
    this.validateField(field);
  },

  // 性别选择变化
  onGenderChange(e) {
    const index = e.detail.value;
    this.setData({
      genderIndex: index,
      gender: index === 0 ? 1 : 2 // 索引0→男(1)，索引1→女(2)
    });
  },

  // 单个字段验证
  validateField(field) {
    const value = this.data[field];
    const errors = { ...this.data.formErrors };

    switch(field) {
      case 'username':
        errors.username = value.trim() 
          ? (value.length < 4 ? '用户名至少4个字符' : '') 
          : '请输入用户名';
        break;
      case 'password':
        errors.password = value.trim() 
          ? (value.length < 6 ? '密码至少6个字符' : '') 
          : '请输入密码';
        // 密码变化时重新验证确认密码
        if (this.data.confirmPwd) {
          this.validateField('confirmPwd');
        }
        break;
      case 'confirmPwd':
        errors.confirmPwd = value.trim() 
          ? (value !== this.data.password ? '两次密码不一致' : '') 
          : '请确认密码';
        break;
      case 'phone':
        const phoneReg = /^1[3-9]\d{9}$/;
        errors.phone = value.trim() 
          ? (!phoneReg.test(value) ? '请输入正确的手机号' : '') 
          : '请输入手机号';
        break;
      case 'age':
        errors.age = value.trim() 
          ? (value < 1 || value > 120 ? '请输入1-120之间的年龄' : '') 
          : '请输入年龄';
        break;
    }

    this.setData({ formErrors: errors });
    return !errors[field];
  },

  // 表单整体验证
  validateForm() {
    const fields = ['username', 'password', 'confirmPwd', 'phone', 'age'];
    let isValid = true;
    
    fields.forEach(field => {
      if (!this.validateField(field)) {
        isValid = false;
      }
    });

    return isValid;
  },

  // 注册提交
  register() {
    // 表单验证
    if (!this.validateForm()) {
      // 滚动到第一个错误字段
      const firstErrorField = Object.keys(this.data.formErrors).find(
        key => this.data.formErrors[key]
      );
      if (firstErrorField) {
        wx.pageScrollTo({
          selector: `#${firstErrorField}`,
          duration: 300
        });
      }
      return;
    }

    // 准备提交数据
    const { username, password, phone, nickname, age, gender, address } = this.data;
    const submitData = {
      username: username.trim(),
      password: password.trim(),
      phone: phone.trim(),
      nickname: nickname.trim() || username.trim(), // 昵称默认用用户名
      age: parseInt(age.trim()),
      gender,
      address: address.trim(),
      status: 1
    };

    // 显示加载
    this.setData({ isLoading: true });
    
    // 发送注册请求
    wx.request({
      url: 'http://localhost:8080/user/add',
      method: 'POST',
      data: submitData,
      header: { 'content-type': 'application/x-www-form-urlencoded' },
      success: (res) => {
        this.setData({ isLoading: false });
        console.log('注册接口返回:', res.data);

        // 验证成功状态（兼容数字和字符串状态码）
        if ([201, '201', 'success'].includes(res.data.code)) {
          wx.showToast({
            title: '注册成功，即将跳转登录',
            icon: 'success',
            duration: 1500,
            mask: true
          });

          // 确保跳转执行（使用redirectTo关闭当前页）
          setTimeout(() => {
            wx.redirectTo({
              url: '/pages/login/login',
              fail: (err) => {
                console.error('跳转登录页失败:', err);
                wx.showModal({
                  title: '提示',
                  content: '注册成功，但跳转失败，请手动点击"立即登录"',
                  showCancel: false
                });
              }
            });
          }, 1500);
        } else {
          wx.showToast({
            title: res.data.msg || '注册失败，请重试',
            icon: 'none',
            duration: 2000
          });
        }
      },
      fail: (err) => {
        this.setData({ isLoading: false });
        console.error('注册请求失败:', err);
        wx.showToast({
          title: '网络错误，请检查连接',
          icon: 'none',
          duration: 2000
        });
      }
    });
  }
});